package com.pclong.sql;

public interface SQLGenerator {

	/**
	 * 获取所插入的新纪录对应的ID值。
	 */
	public String getInsertedIdMethod();
	
	// ==================================================================================
	// GENERATE_INSERT_STATEMENT
	// ==================================================================================
	/**
	 * 给定表名tableName和字段数组colNames，将其拼接为一条Insert语句。
	 */
	public String generateInsertStatement(String tableName, String[] colNames);
	
	// ==================================================================================
	// GENERATE_UPDATE_STATEMENT
	// ==================================================================================
	/**
	 * 给定表名tableName和需要更新的字段数组colNames，
	 * 将其拼接为一条带有where查询条件（where参数中需要自带where关键字）的Update语句。
	 */
	public String generateUpdateStatementWhere(String tableName, String[] colNames, String where);	
	/**
	 * 给定表名tableName和需要更新的字段名colName（只希望更新一个字段），
	 * 将其拼接为一条带有where查询条件（where参数中需要自带where关键字）的Update语句。
	 */
	public String generateUpdateStatementWhere(String tableName, String colName, String where);	
	/**
	 * 给定表名tableName和需要更新的字段数组colNames，
	 * 将其拼接为一条带有ID查询条件的Update语句。
	 */
	public String generateUpdateStatementId(String tableName, String[] colNames);
	/**
	 * 给定表名tableName和需要更新的字段名colName（只希望更新一个字段），
	 * 将其拼接为一条带有ID查询条件的Update语句。
	 */
	public String generateUpdateStatementId(String tableName, String colName);
	/**
	 * 给定表名tableName和需要更新的字段数组colNames，将其拼接为一条Update语句。
	 */
	public String generateUpdateStatement(String tableName, String[] colNames);
	/**
	 * 给定表名tableName和需要更新的字段名colName（只希望更新一个字段），
	 * 将其拼接为一条Update语句。
	 */
	public String generateUpdateStatement(String tableName, String colName);
	
	// ==================================================================================
	// GENERATE_DELETE_STATEMENT
	// ==================================================================================
	/**
	 * 给定表名tableName，将其拼接为一条带有where查询条件（where参数中需要自带where关键字）的delete语句。
	 */
	public String generateDeleteStatementWhere(String tableName, String where);
	/**
	 * 给定表名tableName，将其拼接为一条带有ID查询条件的delete语句。
	 */
	public String generateDeleteStatementId(String tableName);
	/**
	 * 给定表名tableName，将其拼接为一条带有ID查询条件的delete语句
	 * （没有where条件，则删除全表所有记录）。
	 */
	public String generateDeleteStatement(String tableName);
	
	// ==================================================================================
	// GENERATE_SELECT_STATEMENT
	// ==================================================================================
	/**
	 * 给定表名tableName和需要查询的字段数组colNames，
	 * 将其拼接为一条带有where查询条件（where参数中需要自带where关键字）的select语句。
	 */
	public String generateSelectStatementWhere(String tableName, String[] colNames, String where);
	/**
	 * 给定表名tableName和需要查询的字段数组colNames，
	 * 将其拼接为一条带有ID查询条件的select语句。
	 */
	public String generateSelectStatementId(String tableName, String[] colNames);
	/**
	 * 给定表名tableName和需要查询的字段数组colNames，
	 * 将其拼接为一条select语句。（没有where条件，则查询全表所有记录）。
	 */
	public String generateSelectStatement(String tableName, String[] colNames);
	
	/**
	 * 给定表名和该表的id字段名称，拼成一条含有where条件的查询结果数量语句。
	 */
	public String generateCountStatementId(String tableName, String idField, String where);
}
